1
Управление ростом контейнеров: Размер против вместимости
AI037Lesson 14
00:00

В C++ управление ростом контейнеров — это архитектурный танец между Размер (текущие элементы) и Вместимость (зарезервированная память). Для последовательных контейнеров, таких как vector и string, достижение вместимости вызывает перераспределение: система находит более крупный блок памяти, перемещает все элементы и уничтожает старый блок. Это дорогостоящая операция $O(n)$, которая приводит к невалидации итератора—ваше указание на старые элементы становится «висячим» и опасным.

1. Стратегия расширения

Чтобы избежать частых перераспределений, vector реализации выделяют «буферное» пространство. Команда c.reserve(n) явно задаёт минимальную вместимость без добавления элементов, в то время как c.shrink_to_fit() —это необязательный запрос вернуть избыточную память системе.

2. Разница между изменением размера и резервированием

Хотя reserve reserve влияет только на буфер, resize(n) resize(n) активно меняет логику контейнера. Уменьшение через resize уничтожает элементы, а увеличение добавляет значения по умолчанию.

Размер (используется)Дополнительная вместимостьОбщая вместимость
⚠️ ВНИМАНИЕ: Если resize контейнер сжимается, итераторы к удалённым элементам становятся невалидными. Если расширение вызывает перераспределение, ВСЕ все итераторы становятся невалидными.
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>